CC = gcc
# 当前为C23标准
CFLAGS = -Wall -g -std=c23
# 目标文件名
TARGET = extcmath_main
# 静态库文件名
STATIC_LIB = libextcmath.a
# 源文件列表
SRCS = extcmath.c extcmath_main.c
# 目标文件列表
OBJS = $(SRCS:.c=.o)
# 规则:如何从.c文件生成.o文件体现头文件依赖以及使用设置好的编译选项
$(OBJS): %.o: %.c extcmath.h
 $(CC) $(CFLAGS) -c $< -o $@
# 规则:如何生成静态库将所有目标文件打包成静态库
$(STATIC_LIB): $(OBJS)
 ar rcs $< $(OBJS)
# 规则:如何生成最终可执行文件并链接静态库以及添加数学库
$(TARGET): $(STATIC_LIB) $(OBJS)
 $(CC) $(CFLAGS) $(OBJS) -L. -Wl,--whole-archive -l$(basename $(STATIC_LIB)) -Wl,--no-whole-archive -lm -o $@
# 伪目标:用于清理生成的中间文件和目标文件方便重新编译等操作
clean:
 rm -f $(OBJS) $(STATIC_LIB) $(TARGET)
# 伪目标:用于重新编译整个项目,先清理再编译
rebuild: clean
 make